package net.pushtime.dicmonitor.service.impl;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class SimpleFileAlterationListenerAdaptorServiceImpl extends FileAlterationListenerAdaptor {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 开始监听服务应用程序（每次开始轮询触发一次）
     *
     * @param observer 文件变化观察者对象
     */
    @Override
    public void onStart(FileAlterationObserver observer) {
        logger.info("start monitor dictionary: {}", observer.getDirectory().getAbsolutePath());
    }

    /**
     * 文件夹创建事件
     *
     * @param directory 创建的文件夹
     */
    @Override
    public void onDirectoryCreate(File directory) {
        System.out.println(String.format("create dictionary:%s", directory.getAbsolutePath()));
    }

    /**
     * 目录移动事件
     *
     * @param directory 修改的文件夹
     */
    @Override
    public void onDirectoryChange(File directory) {
        System.out.println(String.format("change dictionary:%s", directory.getAbsolutePath()));
    }

    /**
     * 文件夹删除事件
     *
     * @param directory 被删除的文件夹
     */
    @Override
    public void onDirectoryDelete(File directory) {
        System.out.println(String.format("delete dictionary:%s", directory.getAbsolutePath()));
    }

    /**
     * 文件创建时触发
     *
     * @param file 被创建的文件信息
     */
    @Override
    public void onFileCreate(File file) {
        System.out.println(String.format("create file:%s", file.getAbsolutePath()));
    }

    /**
     * 文件变化事件
     *
     * @param file 发生变化的文件
     */
    @Override
    public void onFileChange(File file) {
        System.out.println(String.format("change file:%s", file.getAbsolutePath()));
    }

    /**
     * 文件删除事件
     *
     * @param file 被删除的文件
     */
    @Override
    public void onFileDelete(File file) {
        System.out.println(String.format("delete file:%s", file.getAbsolutePath()));
    }

    /**
     * 文件系统监听停止事件（每次结束轮询触发一次）
     *
     * @param observer 停止监听后做的处理
     */
    @Override
    public void onStop(FileAlterationObserver observer) {
        logger.info("stop monitor dictionary: {}", observer.getDirectory().getAbsolutePath());
    }
}
